// src/pages/home/hooks/useGuestChannels.ts
import { useTypedDispatch, useTypedSelector } from "@store/index";
import {guestChannelSelectors, saveGuestChannels, } from "@slice/guestChannel";
import { useRequestGuestChannelsMutation } from "@service/channel";
import { useEffect } from "react";

export default function useGuestChannels() {
  // 获取本地访客频道列表
  const guestChannels = useTypedSelector(guestChannelSelectors.selectAll);
  // 获取本地访客列表数量
  const guestChannelTotal= useTypedSelector(guestChannelSelectors.selectTotal)
  // 用于获取服务端访客频道列表
  const [requestGuestChannels, { data, isSuccess }] = useRequestGuestChannelsMutation();
  // 获取 dispatch 方法
  const dispatch = useTypedDispatch();

  // 检测本地是否存在访客频道列表
  useEffect(() => {
    // 如果本地存在访客频道列表阻止当前代码继续运行
    if (guestChannelTotal !== 0) return;
    // 本地不存在访客频道列表则向服务端请求访客频道列表
    requestGuestChannels(undefined);
    // 运行依赖项列表
  }, [guestChannelTotal, requestGuestChannels]);

  // 检测服务端访客频道列表是否获取成功
  useEffect(() => {
    // 如果服务端访客频道列表获取成功
    if (isSuccess && typeof data !== "undefined") {
      // 将服务端访客频道列表保存到本地
      dispatch(saveGuestChannels(data.data.channels));
    }
  }, [isSuccess, data, dispatch]);

  // 返回访客频道列表
  return guestChannels;
}